// run: $exec < input
#include <iostream>
#include <vector>
#include <string>
#include <map>

std::vector<std::pair<std::string, char>> opt;
int n, q;

std::map<std::string, bool> dp;

std::string op(std::string const & s, int k)
{
	auto t = s;
	auto tt = opt[k].first;
	if (!(s[0] == tt[0] && s[1] == tt[1])) return "";
	t.erase(0, 2);
	t.insert(0, 1, opt[k].second);
	return t;
}

bool judge(std::string const & s)
{
	if (s.empty()) return false;
	if (s.size() == 1) return s[0] == 'a';
	if (dp.find(s) != dp.end()) return dp[s];
	for (int i = 0; i < q; i++)
		if (judge(op(s, i))) return dp[s] = true;
	return dp[s] = false;
}

int ans;

void dfs(std::string const & s)
{
	if ((int)s.size() == n) {
		if (judge(s)) ans++;
		return;
	}
	for (int i = 0; i < 6; i++)
		dfs(s + std::string(1, 'a' + i));
}

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> n >> q;
	opt.resize(q);
	for (int i = 0; i < q; i++)
		std::cin >> opt[i].first >> opt[i].second;
	std::string s(6, 'a');
	dfs("");
	std::cout << ans << '\n';
}

